package com.library.service.impl;

import com.library.entity.Staff;
import com.library.mapper.StaffMapper;
import com.library.service.StaffService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Service
public class StaffServiceImpl implements StaffService {

    @Resource
    private StaffMapper staffMapper;

    /**
     * 新增员工
     * @param staff 员工信息
     * @return 新增成功返回true，否则返回false
     */
    @Override
    public boolean addStaff(Staff staff) {
        // 校验员工编号唯一性
        Map<String, Object> condition = new java.util.HashMap<>();
        condition.put("employeeId", staff.getEmployeeId());
        List<Staff> existingStaff = staffMapper.selectByCondition(condition);

        if (!existingStaff.isEmpty()) {
            return false; // 员工编号已存在
        }

        return staffMapper.insert(staff) > 0;
    }

    /**
     * 更新员工信息
     * @param staff 员工信息
     * @return 更新成功返回true，否则返回false
     */
    @Override
    public boolean updateStaff(Staff staff) {
        // 校验员工是否存在
        Staff oldStaff = staffMapper.selectById(staff.getId());
        if (oldStaff == null) {
            return false; // 员工不存在
        }

        // 校验员工编号变更后的唯一性
        if (!oldStaff.getEmployeeId().equals(staff.getEmployeeId())) {
            Map<String, Object> condition = new java.util.HashMap<>();
            condition.put("employeeId", staff.getEmployeeId());
            List<Staff> existingStaff = staffMapper.selectByCondition(condition);

            if (!existingStaff.isEmpty()) {
                return false; // 新员工编号已存在
            }
        }

        return staffMapper.update(staff) > 0;
    }

    /**
     * 删除员工
     * @param id 员工ID
     * @return 删除成功返回true，否则返回false
     */
    @Override
    public boolean deleteStaff(Long id) {
        // 先查询员工是否存在
        Staff staff = staffMapper.selectById(id);
        if (staff == null) {
            return false; // 员工不存在
        }

        return staffMapper.deleteById(id) > 0;
    }

    /**
     * 根据ID查询员工
     * @param id 员工ID
     * @return 员工信息，不存在则返回null
     */
    @Override
    public Staff getStaffById(Long id) {
        return staffMapper.selectById(id);
    }

    /**
     * 按条件查询员工
     * @param condition 查询条件（姓名、员工编号等）
     * @return 符合条件的员工列表
     */
    @Override
    public List<Staff> getStaffByCondition(Map<String, Object> condition) {
        return staffMapper.selectByCondition(condition);
    }

    /**
     * 查询所有员工
     * @return 所有员工列表
     */
    @Override
    public List<Staff> getAllStaff() {
        return staffMapper.selectAll();
    }
}
